অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) লাইব্রেরিতে Functor একটি শক্তিশালী ধারণা, যা Predicate, Transformer, এবং Closure এর মাধ্যমে বিভিন্ন কার্যক্রম সম্পাদন করতে ব্যবহৃত হয়। এটি কার্যক্রমকে জেনেরিক এবং রিইউজেবল করার সুযোগ প্রদান করে।
Functor হল একটি ফাংশনাল ইন্টারফেস যা একটি নির্দিষ্ট কার্যক্রম সম্পাদন করতে ব্যবহৃত হয়। অ্যাপাচি কমন্স লাইব্রেরি Functor
ধারণার মাধ্যমে বিভিন্ন কাজ সহজতর করে।
Predicate একটি ফাংশনাল ইন্টারফেস, যা একটি শর্ত (condition) যাচাই করে এবং true
বা false
রিটার্ন করে। এটি সাধারণত ডেটা ফিল্টারিং বা শর্ত চেক করার জন্য ব্যবহৃত হয়।
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;
import java.util.ArrayList;
import java.util.List;
public class PredicateExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(10);
numbers.add(15);
numbers.add(20);
numbers.add(25);
// Predicate যা শুধু জোড় সংখ্যা রিটার্ন করে
Predicate<Integer> isEven = number -> number % 2 == 0;
// ফিল্টার করা
List<Integer> evenNumbers = new ArrayList<>();
CollectionUtils.select(numbers, isEven, evenNumbers);
System.out.println("Even Numbers: " + evenNumbers);
}
}
Even Numbers: [10, 20]
Transformer একটি অবজেক্টকে অন্য একটি অবজেক্টে রূপান্তরিত করে। এটি ম্যাপিং বা ডেটা ট্রান্সফরমেশনের জন্য ব্যবহৃত হয়।
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Transformer;
import java.util.ArrayList;
import java.util.List;
public class TransformerExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
// Transformer যা সংখ্যা স্কয়ার করে
Transformer<Integer, Integer> squareTransformer = number -> number * number;
// ট্রান্সফর্ম করা
List<Integer> squaredNumbers = new ArrayList<>();
CollectionUtils.transform(numbers, squareTransformer);
System.out.println("Squared Numbers: " + numbers);
}
}
Squared Numbers: [1, 4, 9]
Closure একটি কার্যক্রম সম্পাদন করে এবং এর কোনো আউটপুট রিটার্ন করে না। এটি সাধারণত সাইড এফেক্টযুক্ত কার্যক্রমের জন্য ব্যবহৃত হয়।
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Closure;
import java.util.ArrayList;
import java.util.List;
public class ClosureExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
// Closure যা প্রতিটি সংখ্যা প্রিন্ট করে
Closure<Integer> printClosure = System.out::println;
// লিস্টে কার্যক্রম প্রয়োগ
CollectionUtils.forAllDo(numbers, printClosure);
}
}
1
2
3
Functor ধারণার মাধ্যমে Predicate, Transformer, এবং Closure কে একই কাঠামোয় ব্যবহার করা যায়। এটি কোডকে আরও জেনেরিক এবং মডুলার করে তোলে। নিচে একটি উদাহরণ দেওয়া হলো যেখানে Functor এর ইন্টিগ্রেশন রয়েছে:
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.Closure;
import java.util.ArrayList;
import java.util.List;
public class FunctorIntegrationExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
numbers.add(5);
// Predicate: শুধু জোড় সংখ্যা সিলেক্ট করে
Predicate<Integer> isEven = number -> number % 2 == 0;
// Transformer: সংখ্যা দ্বিগুণ করে
Transformer<Integer, Integer> doubleTransformer = number -> number * 2;
// Closure: সংখ্যাগুলো প্রিন্ট করে
Closure<Integer> printClosure = System.out::println;
// Filter, Transform এবং Apply
List<Integer> evenNumbers = new ArrayList<>();
CollectionUtils.select(numbers, isEven, evenNumbers);
CollectionUtils.transform(evenNumbers, doubleTransformer);
CollectionUtils.forAllDo(evenNumbers, printClosure);
}
}
4
8
অ্যাপাচি কমন্স কালেকশনস লাইব্রেরি Functor এর মাধ্যমে জাভার কার্যক্রমকে আরও মডুলার এবং কার্যকরী করে তোলে।
common.read_more